﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OracleClient;
using System.Collections.Generic;
using Pms.Utils;
using Biblioteca.Utils;
using Biblioteca.DataBase;
using SERIX.Util;


namespace SERIX.Classes
{
    public class CEvolucaoBeneficiario
    {
        private string IDT_BENEF;
        private string IDT_TPO_BENEF;
        private string DAT_NASC;
        private string SEXO;
        private string ESTADO_CIVIL;
        private string ESCOLARIDADE;
        private string COND_PRODUTOR;
        private string NOM_BENEF;
        private string APELIDO;
        private string ENDERECO;
        private string NUMERO;
        private string BAIRRO;
        private string COMPLEMENTO;
        private string CIDADE;
        private string UF;
        private string CEP;
        private string CPF;
        private string RG;
        private string CERT_NASC;
        private string EMAIL;
        private string FONE1;
        private string FONE2;
        private string FONE3;
        private string CELULAR_1;
        private string CELULAR_2;
        private string TEL_COMERCIAL;
        private string EMAIL_2;
        private string DAT_ASSIST;
        private string NRO_FILHOS;
        private string MUNIC_NASC;
        private string UF_NASC;
        private string ENDERECO_COM;
        private string COMPL_COM;
        private string BAIRRO_COM;
        private string CEP_COM;
        private string IDT_MUN;
        private string POVOADO_COM;
        private string DAT_EXPEDICAO;
        private string ORGAO_EXPED;
        private string ORIGEM_RENDA;
        private string DATAINICIO;
        private string IDT_COM;
        private string NUMERO_COM;
        private string IDT_EVOLUCAO;
        private string DT_INI_CADASTRO;
        private string DT_ATUAL_CADASTRO;
        private string USUARIO_INI;
        private string USUARIO_FIM;

        /// <summary>
        /// Construtor da Classe
        /// </summary>
        /// <param name="dao">Objeto da classe Cbeneficiarios</param>
        /// <param name="log">Objeto da classe ClogCadastro</param>
        public CEvolucaoBeneficiario(CBeneficiarios dao, CLogCadastro log)
        {
            this.IDT_BENEF = dao.Idt_benef;
            this.IDT_TPO_BENEF = dao.Idt_tpo_benef;
            this.DAT_NASC = dao.Dat_nasc;
            this.SEXO = dao.Sexo;
            this.ESTADO_CIVIL = dao.Estado_civil;
            this.ESCOLARIDADE = dao.Escolaridade;
            this.COND_PRODUTOR = dao.Cond_Produtor;
            this.NOM_BENEF = dao.Nom_benef;
            this.APELIDO = dao.Apelido;
            this.ENDERECO = dao.Endereco;
            this.NUMERO = dao.Numero;
            this.BAIRRO = dao.Bairro;
            this.COMPLEMENTO = dao.Complemento;
            this.CIDADE = dao.Cidade;
            this.UF = dao.Uf;
            this.CEP = dao.Cep;
            this.CPF = dao.Cpf;
            this.RG = dao.Rg;
            this.CERT_NASC = dao.Cert_nasc;
            this.EMAIL = dao.Email;
            this.FONE1 = dao.Fone1;
            this.FONE2 = dao.Fone2;
            this.FONE3 = dao.Fone3;
            this.CELULAR_1 = dao.Celular_1;
            this.CELULAR_2 = dao.Celular_2;
            this.TEL_COMERCIAL = dao.Tel_Comercial;
            this.EMAIL_2 = dao.Email_2;
            this.DAT_ASSIST = dao.Dat_Assist;
            this.NRO_FILHOS = dao.Nro_Filhos;
            this.MUNIC_NASC = dao.Munic_Nasc;
            this.UF_NASC = dao.Uf_Nasc;
            this.ENDERECO_COM = dao.Endereco_Com;
            this.COMPL_COM = dao.Compl_Com;
            this.BAIRRO_COM = dao.Bairro_Com;
            this.CEP_COM = dao.Cep_Com;
            this.IDT_MUN = dao.Idt_mun;
            this.POVOADO_COM = dao.Povoado_Com;
            this.DAT_EXPEDICAO = dao.Dat_Expedicao;
            this.ORGAO_EXPED = dao.Orgao_Exped;
            this.ORIGEM_RENDA = dao.Origem_Renda;
            this.DATAINICIO = dao.dat_Inicio;
            this.IDT_COM = dao.Idt_com;
            this.NUMERO_COM = dao.Numero_com;
            this.USUARIO_FIM = log.Usuario_fim;
            this.USUARIO_INI = log.Usuario_Ini;
            this.DT_ATUAL_CADASTRO = log.Log_Ultima;
            this.DT_INI_CADASTRO = log.Log_Primeiro;
        }
        
            #region Propriedades

        public string Log_Primeiro
        {
            get { return this.DT_INI_CADASTRO; }
            set { this.DT_INI_CADASTRO = value; }
        }
        public string Log_Ultima
        {
            get { return this.DT_ATUAL_CADASTRO; }
            set { this.DT_ATUAL_CADASTRO = value; }
        }
        public string Usuario_Ini
        {
            get { return this.USUARIO_INI; }
            set { this.USUARIO_INI = value; }
        }
        public string Usuario_fim
        {
            get { return this.USUARIO_FIM; }
            set { this.USUARIO_FIM = value; }
        }
        
        /// <summary>
        /// NUMERO DO ENDEREÇO DE COMERCIO DO BENEFICIARIO
        /// </summary>
        public string Numero_com
        {
            get { return this.NUMERO_COM; }
            set { this.NUMERO_COM = value; }
        }
        public string Idt_com
        {
            get { return this.IDT_COM; }
            set { this.IDT_COM = value; }
        }
        /// <sumary>
        /// Identificador do beneficiario
        /// <sumary>
        public string Idt_benef
        {
            get
            {
                return this.IDT_BENEF;
            }
            set
            {
                this.IDT_BENEF = value;
            }
        }
        /// <sumary>
        /// Identificador do tipo de beneficiario
        /// <sumary>
        public string Idt_tpo_benef
        {
            get
            {
                return this.IDT_TPO_BENEF;
            }
            set
            {
                this.IDT_TPO_BENEF = value;
            }
        }
        /// <sumary>
        /// Data de nascimento
        /// <sumary>
        public string Dat_nasc
        {
            get
            {
                return this.DAT_NASC;
            }
            set
            {
                this.DAT_NASC = value;
            }
        }
        /// <sumary>
        /// Sexo do beneficiario: M - Masculino, F - Feminino
        /// <sumary>
        public string Sexo
        {
            get
            {
                return this.SEXO;
            }
            set
            {
                this.SEXO = value;
            }
        }
        /// <sumary>
        /// Estado civil do beneficiario: C - Casado, S - Solteiro, V - Viuvo, O - Outros
        /// <sumary>
        public string Estado_civil
        {
            get
            {
                return this.ESTADO_CIVIL;
            }
            set
            {
                this.ESTADO_CIVIL = value;
            }
        }
        /// <sumary>
        /// Escolaridade do beneficiario: A - Analfabeto, N - Somente assina o nome, P - Primeiro grau, S - Segundo grau, U - Nivel superior
        /// <sumary>
        public string Escolaridade
        {
            get
            {
                return this.ESCOLARIDADE;
            }
            set
            {
                this.ESCOLARIDADE = value;
            }
        }
        /// <sumary>
        /// Condição do produtor
        /// <sumary>
        public string Cond_Produtor
        {
            get
            {
                return this.COND_PRODUTOR;
            }
            set
            {
                this.COND_PRODUTOR = value;
            }
        }
        /// <sumary>
        /// Nome do beneficiario
        /// <sumary>
        public string Nom_benef
        {
            get
            {
                return this.NOM_BENEF;
            }
            set
            {
                this.NOM_BENEF = value;
            }
        }
        /// <sumary>
        /// Apelido do beneficiario
        /// <sumary>
        public string Apelido
        {
            get
            {
                return this.APELIDO;
            }
            set
            {
                this.APELIDO = value;
            }
        }
        /// <sumary>
        /// Endereco do beneficiario
        /// <sumary>
        public string Endereco
        {
            get
            {
                return this.ENDERECO;
            }
            set
            {
                this.ENDERECO = value;
            }
        }
        /// <sumary>
        /// numero do endereço beneficiario
        /// <sumary>
        public string Numero
        {
            get
            {
                return this.NUMERO;
            }
            set
            {
                this.NUMERO = value;
            }
        }
        /// <sumary>
        /// Bairro do beneficiario
        /// <sumary>
        public string Bairro
        {
            get
            {
                return this.BAIRRO;
            }
            set
            {
                this.BAIRRO = value;
            }
        }
        /// <sumary>
        /// Complemento do endereco do beneficiario
        /// <sumary>
        public string Complemento
        {
            get
            {
                return this.COMPLEMENTO;
            }
            set
            {
                this.COMPLEMENTO = value;
            }
        }
        /// <sumary>
        /// Cidade do endereco do beneficiario
        /// <sumary>
        public string Cidade
        {
            get
            {
                return this.CIDADE;
            }
            set
            {
                this.CIDADE = value;
            }
        }
        /// <sumary>
        /// UF do endereco do beneficiario
        /// <sumary>
        public string Uf
        {
            get
            {
                return this.UF;
            }
            set
            {
                this.UF = value;
            }
        }
        /// <sumary>
        /// CEP do endereco do beneficiario
        /// <sumary>
        public string Cep
        {
            get
            {
                return this.CEP;
            }
            set
            {
                this.CEP = value;
            }
        }
        /// <sumary>
        /// CPF do beneficiario
        /// <sumary>
        public string Cpf
        {
            get
            {
                return this.CPF;
            }
            set
            {
                this.CPF = value;
            }
        }
        /// <sumary>
        /// RG do beneficiario
        /// <sumary>
        public string Rg
        {
            get
            {
                return this.RG;
            }
            set
            {
                this.RG = value;
            }
        }
        /// <sumary>
        /// Certidao de nascimento do beneficiario
        /// <sumary>
        public string Cert_nasc
        {
            get
            {
                return this.CERT_NASC;
            }
            set
            {
                this.CERT_NASC = value;
            }
        }
        /// <sumary>
        /// E-mail do beneficiario
        /// <sumary>
        public string Email
        {
            get
            {
                return this.EMAIL;
            }
            set
            {
                this.EMAIL = value;
            }
        }
        /// <sumary>
        /// Telefones do beneficiário
        /// <sumary>
        public string Fone1
        {
            get
            {
                return this.FONE1;
            }
            set
            {
                this.FONE1 = value;
            }
        }
        public string Fone2
        {
            get
            {
                return this.FONE2;
            }
            set
            {
                this.FONE2 = value;
            }
        }
        public string Fone3
        {
            get
            {
                return this.FONE3;
            }
            set
            {
                this.FONE3 = value;
            }
        }

        
        /// <summary>
        /// Celulares do beneficiario
        /// </summary>
        public string Celular_1
        {
            get
            {
                return this.CELULAR_1;
            }
            set
            {
                this.CELULAR_1 = value;
            }
        }
        public string Celular_2
        {
            get
            {
                return this.CELULAR_2;
            }
            set
            {
                this.CELULAR_2 = value;
            }
        }
        public string Tel_Comercial
        {
            get
            {
                return this.TEL_COMERCIAL;
            }
            set
            {
                this.TEL_COMERCIAL = value;
            }
        }
        public string Email_2
        {
            get
            {
                return this.EMAIL_2;
            }
            set
            {
                this.EMAIL_2 = value;
            }
        }
        /// <summary>
        /// Data 1ª assistencia
        /// </summary>
        public string Dat_Assist
        {
            get
            {
                return this.DAT_ASSIST;
            }
            set
            {
                this.DAT_ASSIST = value;
            }
        }

        /// <summary>
        /// Número de Filhos
        /// </summary>
        public string Nro_Filhos
        {
            get
            {
                return this.NRO_FILHOS;
            }
            set
            {
                this.NRO_FILHOS = value;
            }
        }

        /// <summary>
        /// Municipio de nascimento do beneficiario
        /// </summary>
        public string Munic_Nasc
        {
            get
            {
                return this.MUNIC_NASC;
            }
            set
            {
                this.MUNIC_NASC = value;
            }
        }

        /// <summary>
        /// UF de nascimento do beneficiario
        /// </summary>
        public string Uf_Nasc
        {
            get
            {
                return this.UF_NASC;
            }
            set
            {
                this.UF_NASC = value;
            }
        }

        /// <summary>
        /// Endereço Comercial do beneficiario
        /// </summary>
        public string Endereco_Com
        {
            get
            {
                return this.ENDERECO_COM;
            }
            set
            {
                this.ENDERECO_COM = value;
            }
        }

        public string Compl_Com
        {
            get
            {
                return this.COMPL_COM;
            }
            set
            {
                this.COMPL_COM = value;
            }
        }

        public string Bairro_Com
        {
            get
            {
                return this.BAIRRO_COM;
            }
            set
            {
                this.BAIRRO_COM = value;
            }
        }

        public string Cep_Com
        {
            get
            {
                return this.CEP_COM;
            }
            set
            {
                this.CEP_COM = value;
            }
        }

        public string Idt_mun
        {
            get
            {
                return this.IDT_MUN;
            }
            set
            {
                this.IDT_MUN = value;
            }
        }
        
        public string Povoado_Com
        {
            get
            {
                return this.POVOADO_COM;
            }
            set
            {
                this.POVOADO_COM = value;
            }
        }

        /// <summary>
        /// Data de expedição de documento de identificação
        /// </summary>
        public string Dat_Expedicao
        {
            get
            {
                return this.DAT_EXPEDICAO;
            }
            set
            {
                this.DAT_EXPEDICAO = value;
            }
        }
        
        /// <summary>
        /// Orgão que expediu o documento
        /// </summary>
        public string Orgao_Exped
        {
            get
            {
                return this.ORGAO_EXPED;
            }
            set
            {
                this.ORGAO_EXPED = value;
            }
        }
        
        /// <summary>
        /// Origem da renda do beneficiario
        /// </summary>
        public string Origem_Renda
        {
            get
            {
                return this.ORIGEM_RENDA;
            }
            set
            {
                this.ORIGEM_RENDA = value;
            }
        }

        public string dat_Inicio
        {
            get
            {
                return this.DATAINICIO;
            }
            set
            {
                this.DATAINICIO = value;
            }
        }       
 
        public string idt_evolucao
        {
            get
            {
                return this.IDT_EVOLUCAO;
            }
            set
            {
                this.IDT_EVOLUCAO = value;
            }
        }

#endregion Propriedades

        /// <summary>
        /// Chama métodos para gravar a evolução
        /// </summary>
        /// <param name="Login">Usuario Logado</param>
        /// <param name="Bens">DataTable com a tabela de bens do beneficiario</param>
        //public void Inserir(string Login, DataTable Bens)
        //{
        //    ObterIdtEvolucao();
        //    Beneficiario_Evolucao(Login);
        //    Bens_Beneficiario_Evolucao(Bens);            
        //}    
    
        /// <summary>
        /// Recebe datatable e chama o método para inserir os bens da evolucao
        /// </summary>
        /// <param name="EvolucaoBens">DataTable</param>
        private void Bens_Beneficiario_Evolucao(DataTable EvolucaoBens)
        {
            int linhas = EvolucaoBens.Rows.Count;
            int colunas = EvolucaoBens.Columns.Count;
            string[] Dados = new string[10];

            for (int i = 0; i < linhas; i++)
            {                
                for (int j = 0; j < colunas; j++)
                {
                    Dados[j] = EvolucaoBens.Rows[i][j].ToString();
                }
                InserirBensEvolucao(Dados);
            }
        }

        /// <summary>
        /// Inserir os Bens do Beneficiario na Evolução
        /// </summary>
        /// <param name="Dados">Array com os dados referente a uma linha da tabela Bens_beneficiarios</param>
        private void InserirBensEvolucao(string[] Dados)
        {
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string query = @"INSERT INTO SRX_BENS_BENEFICIARIO_EVOL (IDT_BENS_BENEF, Idt_Benef, BENS_BENEF, QUANT_BENEF, ANO_BENEF, TPO_VINC, IDT_DESC, IDT_EVOLUCAO)
                    VALUES (:IDT_BENS_BENEF, :Idt_Benef, :BENS_BENEF, :QUANT_BENEF, :ANO_BENEF, :TPO_VINC, :IDT_DESC, :IDT_EVOLUCAO)";
            OracleCommand cmd = new OracleCommand(query, conexao);


            cmd.Parameters.Add("IDT_BENS_BENEF", OracleType.VarChar);
            cmd.Parameters.Add("Idt_Benef", OracleType.VarChar);
            cmd.Parameters.Add("BENS_BENEF", OracleType.VarChar);
            cmd.Parameters.Add("QUANT_BENEF", OracleType.VarChar);
            cmd.Parameters.Add("ANO_BENEF", OracleType.VarChar);
            cmd.Parameters.Add("TPO_VINC", OracleType.Char);
            cmd.Parameters.Add("IDT_DESC", OracleType.VarChar);
            cmd.Parameters.Add("IDT_EVOLUCAO", OracleType.Number);

            cmd.Parameters["IDT_BENS_BENEF"].Value = Dados[0];
            cmd.Parameters["Idt_Benef"].Value = Dados[2];
            cmd.Parameters["BENS_BENEF"].Value = Dados[1];
            cmd.Parameters["QUANT_BENEF"].Value = Dados[3];
            cmd.Parameters["ANO_BENEF"].Value = Dados[4];
            cmd.Parameters["TPO_VINC"].Value = Dados[5];
            cmd.Parameters["IDT_DESC"].Value = Dados[6];
            cmd.Parameters["IDT_EVOLUCAO"].Value = IDT_EVOLUCAO;


            try
            {
                conexao.Open();
                cmd.ExecuteNonQuery();
            }
            catch
            {
                conexao.Close();
            }
            finally
            {
                conexao.Close();
            }
        }        
        /// <summary>
        /// Obtem a chave primaria da evolução
        /// </summary>
        

        /// <summary>
        /// Método para preencher o gridview na pagina de beneficiarios no caso da evolução
        /// </summary>
        /// <param name="idtevolucao">Identificador que liga a tabela dos bens_evol com Beneficiarios_evol</param>
        /// <returns>Daratable com os bens de acordo com a data regsitrada</returns>
        static public DataTable CarregaGridBens(string idtevolucao)
        {
            string sql = "SELECT * FROM SRX_BENS_BENEFICIARIO_EVOL WHERE IDT_EVOLUCAO = :IDT_EVOLUCAO AND DATA_FIM IS NULL";
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            Query qy = new Query(conexao, sql);
            DataTable datatable = null;
            try
            {
                conexao.Open();
                qy.AdicionarParametro("IDT_EVOLUCAO", DbType.String, idtevolucao);
                qy.Executar();
                datatable = qy.ObterDataTable();
            }
            catch { }
            finally
            {
                conexao.Close();
            }
            return datatable;
        }

        /// <summary>
        /// Pesquisa pelo código de Evolução
        /// </summary>
        /// <param name="idt">Código de Evolução</param>
        /// <param name="ObterTodos">Usuario Logado</param>
        /// <returns>Objeto da classe CBeneficiarios</returns>
        static public CBeneficiarios PesquisaporCodigo(string idt, string login)
        {
            CBeneficiarios obj;
            string SQL = @"SELECT Idt_Benef, IDT_TPO_BENEF, 
                                  TO_CHAR(DAT_NASC, 'DD/MM/YYYY') AS DAT_NASC, 
                                  SEXO, ESTADO_CIVIL, ESCOLARIDADE, COND_PROD, 
                                  NOM_BENEF, APELIDO, ENDERECO, NUMERO, BAIRRO, 
                                  COMPLEMENTO, CIDADE, UF, CEP, BIBL_PKG.FORMATAR_CPF(CPF) CPF, RG, 
                                  CERT_NASC, EMAIL, TELEFONE_1, TELEFONE_2, TELEFONE_3, 
                                  CELULAR_1, CELULAR_2, TEL_COMERCIAL, EMAIL_2, DAT_ASSIST,
                                  NRO_FILHOS, MUNIC_NASC, UF_NASC, ENDERECO_COM, COMPL_COM,
                                  BAIRRO_COM, CEP_COM, IDT_MUN, POVOADO_COM, DAT_EXPEDICAO,
                                  ORGAO_EXPED, ORIGEM_RENDA, DATAINICIO, DT_INI_CADASTRO, DT_ATUAL_CADASTRO, IDT_COM, NUMERO_COM 
                            FROM  Serix.SRX_BENEFICIARIOS_EVOL 
                            WHERE IDT_EVOLUCAO = :IDT_EVOLUCAO";
            Query qy = null;
            try
            {
                qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);
                qy.AdicionarParametro("IDT_EVOLUCAO", DbType.String, idt);

                qy.Executar();
                obj = new CBeneficiarios(qy.ObterCampo("Idt_Benef"),
                    qy.ObterCampo("IDT_TPO_BENEF"),
                    qy.ObterCampo("DAT_NASC"),
                    qy.ObterCampo("SEXO"),
                    qy.ObterCampo("ESTADO_CIVIL"),
                    qy.ObterCampo("ESCOLARIDADE"),
                    qy.ObterCampo("COND_PROD"),
                    qy.ObterCampo("NOM_BENEF"),
                    qy.ObterCampo("APELIDO"),
                    qy.ObterCampo("ENDERECO"),
                    qy.ObterCampo("NUMERO"),
                    qy.ObterCampo("BAIRRO"),
                    qy.ObterCampo("COMPLEMENTO"),
                    qy.ObterCampo("CIDADE"),
                    qy.ObterCampo("UF"),
                    qy.ObterCampo("CEP"),
                    qy.ObterCampo("CPF"),
                    qy.ObterCampo("RG"),
                    qy.ObterCampo("CERT_NASC"),
                    qy.ObterCampo("EMAIL"),
                    qy.ObterCampo("TELEFONE_1"),
                    qy.ObterCampo("TELEFONE_2"),
                    qy.ObterCampo("TELEFONE_3"),
                    qy.ObterCampo("CELULAR_1"),
                    qy.ObterCampo("CELULAR_2"),
                    qy.ObterCampo("TEL_COMERCIAL"),
                    qy.ObterCampo("EMAIL_2"),
                    qy.ObterCampo("DAT_ASSIST"),
                    qy.ObterCampo("NRO_FILHOS"),
                    qy.ObterCampo("MUNIC_NASC"),
                    qy.ObterCampo("UF_NASC"),
                    qy.ObterCampo("ENDERECO_COM"),
                    qy.ObterCampo("COMPL_COM"),
                    qy.ObterCampo("BAIRRO_COM"),
                    qy.ObterCampo("CEP_COM"),
                    qy.ObterCampo("IDT_MUN"),
                    qy.ObterCampo("POVOADO_COM"),
                    qy.ObterCampo("DAT_EXPEDICAO"),
                    qy.ObterCampo("ORGAO_EXPED"),
                    qy.ObterCampo("ORIGEM_RENDA"),
                    qy.ObterCampo("DATAINICIO"),
                    qy.ObterCampo("IDT_COM"),
                    qy.ObterCampo("NUMERO_COM"), qy.ObterCampo("IDT_CONJUGE"));
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                {
                    qy.FecharConexao();
                }
                return new CBeneficiarios();
            }
            finally
            {
                qy.FecharConexao();
            }
            return obj;
        }

    }
}
